跳到主要内容

控件(Widget)

WUI 提供了大量的基础控件,基于这些控件,用户可以快速编写用户界面 (UI)。在WUI中,控件类具备以下特点:

  1. 结合了组合和继承,控件具有高度的可扩展性和灵活性。
  2. 提供了常用的 UI 模板,例如树形控件 (Tree Widget)、停靠控件 (Dock Widget) 和功能区控件 (Ribbon Widget)。
  3. 支持自定义事件。
  4. 提供多种不同的样式,并支持样式自定义。
  5. 支持字体图标 (Font Icon)。

在这里,我们将介绍 Widget 类,它是所有其他基础控件的父类。

详细描述

Widget , 继承自 EventWatcher, 是所有其他控件的基类。控件是用户界面的基本单元:它们接收来自窗口系统的鼠标、键盘以及其他事件。Widget 类有许多子类,这些子类提供了实际的功能,例如 Button(按钮)、Slider(滑块)、ListWidget(列表控件)。

当一个控件被用作容器来分组多个子控件时,它被称为复合控件 Composite Widget。如果一个控件的父级或更父级的控件未定义,则该控件处于离线状态 (Offline)。

控件中还封装了 DOM 元素(默认情况下是一个 div 标签),并提供了友好简洁的 API 接口。

事件

部件具有 showhide 事件。当用户修改控件的 visible 属性时,这些事件会被触发。用户可以编写事件处理程序来响应这些事件:

// 监听显示事件
widget.bind('showed', () => {
// 控件现在可见
});

// 监听隐藏事件
widget.bind('hidden', () => {
// 控件现在不可见
});

示例代码

以下代码展示了如何创建一个控件:

const desktop = Desktop.instance(); // 根控件,一个应用程序中只能有一个实例。
const widget = new Widget(desktop);
widget.size = new Size(200, 200);
widget.enabled = false; // 如果一个控件被禁用,它将变为“禁用”外观。

如果你想在网页中嵌入一个视频:

const desktop = Desktop.instance();
const widget = new Widget(desktop, 'video');
const element = widget.dom as HTMLVideoElement;
element.src = 'video.mp4';
element.play();

释放资源

在受保护的 free() 方法中释放资源。当父控件或控件本身被销毁时,系统会自动调用此方法。例如:

class TimerWidget extends Widget {
private m_timer: Timer;

constructor(parent?: Widget) {
super(parent);

this.m_timer = new Timer();
this.m_timer.bind('timeout', (): void => { });
this.m_timer.start(1000);
}

protected free(): void {
this.m_timer.stop();

super.free();
}
}

const widget = new TimerWidget();
widget.destroy();// 销毁控件并释放资源